package com.quad.innovators.salesease.service.warehouse;

import com.baomidou.mybatisplus.extension.service.IService;
import com.quad.innovators.salesease.common.result.PageResultBean;
import com.quad.innovators.salesease.model.common.Option;
import com.quad.innovators.salesease.model.entity.warehouse.SaleReturnOrder;
import com.quad.innovators.salesease.model.form.warehouse.PurchaseOrderForm;
import com.quad.innovators.salesease.model.form.warehouse.SaleOrderDetailForm;
import com.quad.innovators.salesease.model.form.warehouse.SaleReturnOrderForm;
import com.quad.innovators.salesease.model.query.warehouse.PurchaseOrderPageQuery;
import com.quad.innovators.salesease.model.query.warehouse.SaleReturnOrderQuery;
import com.quad.innovators.salesease.model.vo.warehouse.PurchaseOrderVO;
import com.quad.innovators.salesease.model.vo.warehouse.SaleReturnOrderVO;

import java.util.List;

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;

/**
 * @author : shanshan.li
 * @createTime : 2024/12/18 15:59
 * @Version : 1.0 
 */
public interface SaleReturnOrderService extends IService<SaleReturnOrder> {
    /**
     * 分页查询
     * @param queryParams 查询参数
     * @return 返回结果
     */
    PageResultBean<SaleReturnOrderVO> listPage(SaleReturnOrderQuery queryParams);

    /**
     * 获取销售退货单表单数据
     * @param code 销售退货单code
     * @return 返回销售退货单表单数据
     */
    SaleReturnOrderForm getFormData(String code);

    /**
     * 新增销售退货单据
     * @param form 表单数据
     * @return 返回是否成功
     */
    boolean save(@Valid SaleReturnOrderForm form);

    /**
     * 编辑销售退货单
     * @param code 销售退货单code
     * @param form 销售退货单code
     * @return 返回是否成功
     */
    boolean update(String code, SaleReturnOrderForm form);

    /**
     * 审核销售退货单
     * @param code 审核销售退货单的code
     * @param updateStatus 要修改的目标状态
     * @return 返回是否成功
     */
    boolean updateStatus(String code, Integer updateStatus);

    /**
     * 返回车辆带货绑定销售退货单-已绑定不出现
     * @return 返回下拉列表
     */
    List<Option<String>> vehicleListOptions(String vehicleBringGoodsCode);

    /**
     * 返回销售退货单code列表
     * @param code 车辆带货code
     * @return 销售退货code
     */
    List<String> getSaleReturnCodeList(String code);

    /**
     * 销售退货单绑定车牌号
     * @param saleReturnCodeList 销售退货单列表
     * @param vehicleCode 车辆带货code
     * @return 返回是否成功
     */
    boolean bindSaleReturnOrder(String vehicleCode, List<String> saleReturnCodeList);

    /**
     * 修改车辆绑定销售退货单
     * @param vehicleCode 车辆带货code
     * @param saleReturnCodeList 销售退货列表
     * @return 返回是否成功
     */
    boolean updateBindSaleReturnOrder(String vehicleCode, List<String> saleReturnCodeList);

    /**
     * 获取销售详情扫码列表
     * @param vehicleCode 车辆带货code
     * @return 销售扫码详情
     */
    List<String> getSaleScanCodeByVehicleCode(String vehicleCode);

    /**
     * 获取销售详情扫码列表
     * @param vehicleCode 车辆带货code
     * @return 销售扫码详情
     */
    List<String> getReturnScanCodeByVehicleCode(String vehicleCode);
}
